package com.coderjacky.system.config;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;

@Configuration
public class FeignInterceptor implements RequestInterceptor {

    /**
     * 重写apply方法以自定义RequestTemplate的配置
     * 该方法主要用于处理POST请求，并对请求体和查询参数进行特定的转换
     *
     * @param requestTemplate 待处理的请求模板，用于设置请求的各种属性
     */
    @Override
    public void apply(RequestTemplate requestTemplate) {
        // 检查请求方法是否为POST且请求体为空，这是进行处理的前提条件
        if ("post".equalsIgnoreCase(requestTemplate.method()) && requestTemplate.body() == null) {
            // 获取请求的查询行，即URL中的查询参数部分
            String query = requestTemplate.queryLine();
            // 清空现有的查询参数，因为后续将使用请求体来发送这些参数
            requestTemplate.queries(new HashMap<>());
            // 如果查询行存在且以"?"开头，表明有查询参数需要处理
            if (query!=null && query.startsWith("?")) {
                // 将查询参数部分（去除"?"）作为请求体，这适用于POST请求中以表单形式发送参数
                requestTemplate.body(query.substring(1));
            }
            // 设置请求的Content-Type头，指定请求体的类型为URL编码的表单，使用UTF-8字符集
            requestTemplate.header("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
        }
    }


}
